package com.wu.getleastnumbers_solution;

import java.util.ArrayList;

/**
 * 最小的k个数
 * 输入n个整数，找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字，则最小的4个数字是1,2,3,4。
 *
 * @author lynn
 * @date 2020/8/9 - 17:59
 */
public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) {
        ArrayList<Integer> list = new ArrayList<>();
        if (input == null || input.length == 0 || k < 0 || k > input.length) {
            return list;
        }
        ArrayList<Integer> res = select(input, k, list);
        return res;
    }

    private ArrayList<Integer> select(int[] input, int k, ArrayList<Integer> list) {
        for (int i = 0; i < k; i++) {
            int minValue = input[i];
            int minIndex = i;
            for (int j = i + 1; j < input.length; j++) {
                if (minValue > input[j]) {
                    minValue = input[j];
                    minIndex = j;
                }
            }
            //如果minIndex有变化
            if (minIndex != i) {
                input[minIndex] = input[i];
                input[i] = minValue;
            }
            list.add(input[i]);
        }
        return list;
    }
}